import openpyxl

import macropodus
import pandas as pd
import numpy as np
from MyPackages.UnionFindSet import UnionFindSet


# sent1 = "化学药品原料药制造"
# sent2 = "化学药品制剂制造"
#
# # 文本相似度(similarity)
# sents = macropodus.sim(sent1, sent2, type_sim="total", type_encode="avg")
# print(sents)
# sents = macropodus.sim(sent1, sent2, type_sim="cosine", type_encode="single")
# print(sents)


def check(s1, s2, thred):
    sents = macropodus.sim(s1, s2, type_sim="total", type_encode="avg")
    if sents > thred:
        return True
    else:
        return False


# 输入一列数据(Series类型)，判断两两元素之间是否相似，返回一个元素为二元组的列表
def similar_list(data, thred, col_name):
    length = data.notnull().sum()
    slit = []
    for i in range(length):
        if data[i] == '':
            print(col_name, "的第" ,i, "行存在空格，请及时处理掉")
            continue
        else:
            for j in range(i + 1, length):
                if data[j] == '':
                    continue
                else:
                    if check(data[i], data[j], thred):
                        s = (i, j)
                        slit.append(s)
    return slit


def load_data(sheet_name):
    df = pd.read_excel('dataset/标签测试.xlsx', sheet_name=sheet_name)
    return df


def Print(re, key, col_name):
    with open('result/' + str(key) + "——" + str(col_name) + ".txt", mode='w') as f:
        for i in re:
            for j in i:
                f.write(j + '\n')
            f.write('--------------------------' + '\n')


def Output(writer, data, key, name, colnum):
    # 调整data格式，将其转换为series对象，便于写入excel表中

    for i in range(len(data)):
        # dd = str(dd).replace(',', ';')[1:-1]
        data[i] = str(data[i]).replace(',', ';').replace('\'', '')[1:-1]
    data = pd.Series(data, name=name)
    data.to_excel(writer, sheet_name=key, index=False, startcol=colnum)


def Main(context):
    writer = pd.ExcelWriter('result/newresultall.xlsx', mode='a', if_sheet_exists='overlay', engine='openpyxl')
    for key, values in context.items():
        df = load_data(key)
        for col_num, value in enumerate(values):
            data = df[value['name']]
            sl = similar_list(data, value['thred'], value['name'])
            uf = UnionFindSet(data, sl)
            re = uf.excute()
            print(value['name']+'已完成')
            # Print(re, key, value['name'])
            Output(writer, re, key, value['name'], col_num)
    writer.save()
    writer.close()





# Press the green button in the gutter to run the script.
if __name__ == '__main__':

    # context = {'企业标签': [{'name': '企业法人类型', 'thred': 0.9},
    #                     {'name': '公司注册登记机关', 'thred': 0.9},
    #                     {'name': '企业国民经济行业分类', 'thred': 0.9},
    #                     {'name': '企业包含资质证书类别', 'thred': 0.9}],
    #            '政策标签': [{'name': '政策发布部门', 'thred': 0.9},
    #                     {'name': '政策发文层级', 'thred': 0.9},
    #                     {'name': '政策提及行业类型', 'thred': 0.9},
    #                     {'name': '政策申报有效期限', 'thred': 0.9},
    #                     {'name': '政策服务事项（标准）', 'thred': 0.9},
    #                     {'name': '政策提及机构类型', 'thred': 0.9},
    #                     {'name': '政策主题分类', 'thred': 0.9}]
    #            }
    context = {
    '企业标签':[
        {'name': '基本信息-成立年限', 'thred': 0.9},
        {'name': '基本信息-基本资本', 'thred': 0.9},
        {'name': '基本信息-省份地区（完整参加地理字典标签）', 'thred': 0.9},
        {'name': '基本信息-机构类型', 'thred': 0.9},
        {'name': '基本信息-企业类型', 'thred': 0.9},
        {'name': '基本信息-企业规模', 'thred': 0.9},
        {'name': '基本信息-国民经济行业分类', 'thred': 0.9},
        {'name': '基本信息-法人类型', 'thred': 0.9},
        {'name': '基本信息-注册登记机关', 'thred': 0.9},
        {'name': '质量创新信息-资质证书', 'thred': 0.9},
        {'name': '质量创新信息-知识产权', 'thred': 0.9},
        {'name': '质量创新信息-商标信息', 'thred': 0.9},
        {'name': '质量创新信息-企业荣誉', 'thred': 0.9},
        {'name': '企业风险信息-失信信息', 'thred': 0.9},
        {'name': '企业风险信息-动产抵押', 'thred': 0.9},
        {'name': '企业风险信息-企业信用', 'thred': 0.9},
        {'name': '企业经营状态-税务评级', 'thred': 0.9},
        {'name': '企业经营状态-上市状态', 'thred': 0.9},
        {'name': '企业经营状态-注册状态', 'thred': 0.9},
        {'name': '企业经营状态-融资信息', 'thred': 0.9},
        {'name': '企业经营状态-参保人数', 'thred': 0.9},
        {'name': '企业经营状态-资本类型', 'thred': 0.9}
    ],
    '政策标签':[
        {'name': '政策基本信息-政策性质', 'thred': 0.9},
        {'name': '政策基本信息-政策发布部门', 'thred': 0.9},
        {'name': '政策基本信息-政策发文属地（完整参加地理字典标签）', 'thred': 0.9},
        {'name': '政策基本信息-政策服务对象', 'thred': 0.9},
        {'name': '政策基本信息-政策申报有效期限', 'thred': 0.9},
        {'name': '政策基本信息-政策发文层级', 'thred': 0.9},
        {'name': '政策基本信息-公文种类', 'thred': 0.9},
        {'name': '政策涉及对象-政策提及行业类型', 'thred': 0.9},
        {'name': '政策涉及对象-政策提及机构类型', 'thred': 0.9},
        {'name': '其他政策信息-政策类别', 'thred': 0.9},
        {'name': '其他政策信息-政策主题分类', 'thred': 0.9},
        {'name': '其他政策信息-政策服务事项', 'thred': 0.9}
    ],
    '政策企业标签': [
        {'name': '政策提及的企业规模', 'thred': 0.9},
        {'name': '政策涉及企业限制词标签', 'thred': 0.9},
        {'name': '政策提及企业行业', 'thred': 0.9},
        {'name': '政策服务涉及企业与个人对象', 'thred': 0.9},
        {'name': '政策提及企业涉及产品字典', 'thred': 0.9},
        {'name': '政策提及企业涉及服务字典', 'thred': 0.9},
        {'name': '政策涉及高技术产业（服务业）详细标签', 'thred': 0.9},
        {'name': '政策涉及高技术产业(制造业）详细标签', 'thred': 0.9},
        {'name': '政策涉及国家科技服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及国家旅游及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及健康产业详细标签', 'thred': 0.9},
        {'name': '政策涉及教育培训及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及节能环保清洁产业详细标签', 'thred': 0.9},
        {'name': '政策涉及农业及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及生产性服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及生活性服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及数字经济及其核心产业详细标签', 'thred': 0.9},
        {'name': '政策涉及体育产业详细标签', 'thred': 0.9},
        {'name': '政策涉及文化及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及养老产业详细标签', 'thred': 0.9},
        {'name': '政策涉及战略性新兴产业详细标签', 'thred': 0.9},
        {'name': '政策涉及知识产权（专利）密集型产业详细标签', 'thred': 0.9}]}


    # yiji = input("请输入一级标签的名称")
    # erji = input("请输入二级标签的名称")
    # serchWord = input("请输入要查询的主题词")
    # context = {yiji:[{'name': erji, 'thred': 0.9}]}
    Main(context)



"""
{
    '企业标签':[
        {'name': '基本信息-成立年限', 'thred': 0.9},
        {'name': '基本信息-基本资本', 'thred': 0.9},
        {'name': '基本信息-省份地区（完整参加地理字典标签）', 'thred': 0.9},
        {'name': '基本信息-机构类型', 'thred': 0.9},
        {'name': '基本信息-企业类型', 'thred': 0.9},
        {'name': '基本信息-企业规模', 'thred': 0.9},
        {'name': '基本信息-国民经济行业分类', 'thred': 0.9},
        {'name': '基本信息-法人类型', 'thred': 0.9},
        {'name': '基本信息-注册登记机关', 'thred': 0.9},
        {'name': '质量创新信息-资质证书', 'thred': 0.9},
        {'name': '质量创新信息-知识产权', 'thred': 0.9},
        {'name': '质量创新信息-商标信息', 'thred': 0.9},
        {'name': '质量创新信息-企业荣誉', 'thred': 0.9},
        {'name': '质量创新信息-失信信息', 'thred': 0.9},
        {'name': '质量创新信息-动产抵押', 'thred': 0.9},
        {'name': '企业经营状态-上市状态', 'thred': 0.9},
        {'name': '企业经营状态-注册状态', 'thred': 0.9},
        {'name': '企业经营状态-融资信息', 'thred': 0.9},
        {'name': '企业经营状态-参保人数', 'thred': 0.9},
        {'name': '企业经营状态-资本类型', 'thred': 0.9},
    ],
    '政策标签':[
        {'name': '政策基本信息-政策性质', 'thred': 0.9},
        {'name': '政策基本信息-政策发布部门', 'thred': 0.9},
        {'name': '政策基本信息-政策发文属地（完整参加地理字典标签）', 'thred': 0.9},
        {'name': '政策基本信息-政策服务对象', 'thred': 0.9},
        {'name': '政策基本信息-政策申报有效期限', 'thred': 0.9},
        {'name': '政策基本信息-政策发文层级', 'thred': 0.9},
        {'name': '政策基本信息-公文种类', 'thred': 0.9},
        {'name': '政策涉及对象-政策提及行业类型', 'thred': 0.9},
        {'name': '政策涉及对象-政策提及机构类型', 'thred': 0.9},
        {'name': '其他政策信息-政策类别', 'thred': 0.9},
        {'name': '其他政策信息-政策主题分类', 'thred': 0.9},
        {'name': '其他政策信息-政策服务事项', 'thred': 0.9},
        {'name': '其他政策信息-政策类别', 'thred': 0.9},
        {'name': '其他政策信息-政策类别', 'thred': 0.9},
        {'name': '政策涉及对象-', 'thred': 0.9},
        {'name': '政策涉及对象-', 'thred': 0.9}
    ],
    '政策企业标签': [
        {'name': '政策提及的企业规模', 'thred': 0.9},
        {'name': '政策涉及企业限制词标签', 'thred': 0.9},
        {'name': '政策提及企业行业', 'thred': 0.9},
        {'name': '政策服务涉及企业与个人对象', 'thred': 0.9},
        {'name': '政策提及企业涉及产品字典', 'thred': 0.9},
        {'name': '政策提及企业涉及服务字典', 'thred': 0.9},
        {'name': '政策涉及高技术产业（服务业）详细标签', 'thred': 0.9},
        {'name': '政策涉及高技术产业(制造业）详细标签', 'thred': 0.9},
        {'name': '政策涉及国家科技服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及国家旅游及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及健康产业详细标签', 'thred': 0.9},
        {'name': '政策涉及教育培训及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及节能环保清洁产业详细标签', 'thred': 0.9},
        {'name': '政策涉及农业及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及生产性服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及生活性服务业详细标签', 'thred': 0.9},
        {'name': '政策涉及数字经济及其核心产业详细标签', 'thred': 0.9},
        {'name': '政策涉及体育产业详细标签', 'thred': 0.9},
        {'name': '政策涉及文化及相关产业详细标签', 'thred': 0.9},
        {'name': '政策涉及养老产业详细标签', 'thred': 0.9},
        {'name': '政策涉及战略性新兴产业详细标签', 'thred': 0.9},
        {'name': '政策涉及知识产权（专利）密集型产业详细标签', 'thred': 0.9}]
}



"""